package com.mq.service.impl;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.digest.MD5;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mq.pojo.Admin;
import com.mq.mapper.AdminMapper;
import com.mq.service.IAdminService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mq.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author maoqi
 * @since 2024-06-12
 */
@Service
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements IAdminService {

    @Autowired
    private AdminMapper adminMapper;

    @Override
    public R adminLogin(String username, String password) {
        //1.检查用户名是否存在
        Admin admin = adminMapper.selectByName(username);
        if (admin == null) {
            return R.fail("登录失败,此账户不存在!");
        }
        //2.如果账户中的status属性值为1，代表此用户被封了
        if (admin.getStatus() == 1) {
            return R.fail("登录失败,此账户被封禁!");
        }
        //3.判断密码
        String mysql_pwd = admin.getPassword(); //数据库中的密码ab9719949db909ef5e70ec54dbc1ce1d
        //对传入的密码进行加密
        String input_pwd = MD5.create().digestHex(password + admin.getSalt());
        if (!mysql_pwd.equals(input_pwd)) {
            return R.fail("登录失败,密码错误!");
        }

        //4.以上的判断都通过了，说明可以登录成功
        return R.ok("恭喜,登录成功!").setData(admin);
    }

    @Override
    public R addAdmin(Admin admin) {
        //1.验证用户名是否存在
        String username = admin.getUsername();
        Admin temp =adminMapper.selectByName(username);
        if(temp!=null){
            return R.fail("注册失败,此账号已被注册!");
        }
        //2.此用户名没有被使用,对密码加密
        String password = admin.getPassword();//输入的密码
        //随机6位数，作为密码的密钥
        String salt = RandomUtil.randomString(6);
        String md5pwd = MD5.create().digestHex(password+salt);
        //把加密后的密码设置给对象
        admin.setPassword(md5pwd);
        admin.setSalt(salt);

        //3.因为我们使用的是Mybatis-plus框架，在IService接口中提供一个方法save
        boolean flag = super.save(admin);

        //4.根据flag的值返回不同的结果
        if(flag){
            return  R.ok("注册成功!");
        }else{
            return  R.fail("注册失败!");
        }

    }
}
